/*
@author: ztt
@file: 11-03-流程控制.go
@time: 2022/11/3 15:43
*/
package main

import (
	"bufio"
	"fmt"
	"os"
	"strings"
)

func main()  {
	//流程控制 -- 顺序结构。 选择（分支）结构：条件判断，循环结构
	//条件判断
	/*
	if 布尔表达式 {
		执行语句
	}else {
		执行语句
	}
	if 条件 {
		执行语句
	}else if 条件2 {
		执行语句
	}else {
		执行语句
	}*/

	//if c:=0; c>0 {
	//	fmt.Println("c大于0")
	//}

	/*
	//switch 语句 --python没有
	score := 79
	switch  {
		case score >= 90:
			fmt.Println("优秀")
		case score >= 80:
			fmt.Println("良好")
	default:
			fmt.Println("较差")
	}

	grade := "A"
	switch grade {
	case "A":
		fmt.Println("good")
	case "B":
		fmt.Println("nomall")
	default:
		fmt.Println("bad")

	}*/

/*
	//循环结构 一
	for i := 0; i<10; i++{
		fmt.Println(i)
	}
	//循环结构 二
	i := 0
	for i < 10 {
		fmt.Println(i)
		i++
	}*/

	//遍历 ---range
	//for key,value := range "abc" {
	//	fmt.Println(key,string(value))
	//}

/*
	//外部的 a 作用于整个代码，而循环内部的 a 作用于循环体内部，因此这两个变量可以同名。python 不支持。
	a := 10
	i :=0
	for i < 3 {
		a := 3 + i
		fmt.Println(a)
		i++
	}
	fmt.Println("##########")
	fmt.Println(a)
 */

	//break continue 语句  goto语句（少用）
/*

	var num1, num2 int
	num1 = 1
	LOOP:
		for num1 < 50{
			num1 ++
			for num2 = 2; num2 < num1; num2 ++ {
				if num1 % num2 == 0 {
					goto LOOP
				}
			}

		}
*/


/*
// 练习1：输出等腰三角形
	var num1, num2 string
	i := 0
	num1 = "*"
	num2 = "**"
	fmt.Println(num1)
	LOOP:
		for i < 10 {
			i++
			num1 = num1 + num2
			fmt.Println(num1)
			goto LOOP
		}
*/

//练习2： 输出九九乘法表
	/*
	for y := 1; y <= 9; y++{
		for x := 1; x <= y; x++{
			fmt.Printf("%d*%d=%d ",x,y,x*y)
		}
		fmt.Println()
	}*/

//练习3：判断从键盘输入的字母数字是否为回文,如果将大写字符转化为小写字符，并移除多有非字母数字字符后，正向读和反向读都一样， 那就是回文。
//无限次输入，按q退出 A,bc?: 1d,1C*ba -- > abc1d1cba

	for {
		var str1 string
		var a string
		str2 := ""
		fmt.Println("请输入：")
		reader := bufio.NewReader(os.Stdin)
		str1,_ = reader.ReadString('\n')
		//fmt.Println(str1)

		for i := 0; i < len(str1); i++ {
			if IsAlnum(str1[i]) {
				str2 = str2 + string(str1[i])
			}
		}
		//fmt.Println(str2)
		str3 := strings.ToLower(str2)
		//fmt.Println(str3)
		res := []rune(str3)

		var len = len(res)
		var halfLen = len / 2
		var i int
		for i = 0; i < halfLen; i++ {
			if res[i] != res[len-i-1] {
				break
			}
		}

		if i == halfLen {
			fmt.Println( "是回文")
		} else {
			fmt.Println( "不是回文")
		}

		fmt.Println("请输入q退出，输入任意继续：")
		fmt.Scanln(&a)
		if a == "q" {
			break
		}
	}
}



func IsAlnum(b byte) bool {
	return (b >= 'a' && b <= 'z') || (b >= 'A' && b <= 'Z') || (b >= '0' && b <= '9')
}